package com.hgm.study.viewmodel

import android.util.Log
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import com.hgm.study.model.entity.Article
import com.hgm.study.model.serice.ArticleService
import kotlinx.coroutines.delay

/**
 * 文章列表单独的ViewModel
 * @author    HGM
 * @version   1.0
 */
class ArticleViewModel : ViewModel() {

      private val articleService = ArticleService.instance()
      private val pageSize = 10
      private var pageOffset = 1

      //文章列表数据
      var list by mutableStateOf(
            listOf(
                  Article(
                        title = "人社部向疫情防控期间参与复工复产的劳动者表示祝福",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "中华人民共和国人社部疫情防控公告第三十二期（2）:广东省新冠肺炎患者从去年春季开始日渐增多累计数据达到高峰",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "人社部向疫情防控期间参与复工复产的劳动者表示祝福",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "中华人民共和国人社部疫情防控公告第三十二期（2）:广东省新冠肺炎患者从去年春季开始日渐增多累计数据达到高峰",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "人社部向疫情防控期间参与复工复产的劳动者表示祝福",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "中华人民共和国人社部疫情防控公告第三十二期（2）:广东省新冠肺炎患者从去年春季开始日渐增多累计数据达到高峰",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  ),
                  Article(
                        title = "人社部向疫情防控期间参与复工复产的劳动者表示祝福",
                        source = "学习强国平台",
                        time = "2020年12月12日"
                  )
            )
      )
            private set



      //文章加载状态
      var listLoader by mutableStateOf(false)
            private set

      //是否正在刷新
      var refreshing by mutableStateOf(false)
            private set


      private var hasMore = true

      //获取文章列表方法
      suspend fun fetchArticleList() {
            val articleRes = articleService.getArticle(pageOffset = pageOffset, pageSize = pageSize)
            delay(1000)
            if (articleRes.code == 0) {
                  val tmpList = mutableListOf<Article>()
                  //当不是第一次加载时把上次加载的数据加入进来
                  if (pageOffset != 1) {
                        tmpList.addAll(list)
                  }
                  //获取新数据
                  tmpList.addAll(articleRes.data!!)
                  list = tmpList
                  //当返回的数量与页数相等时说明没有更多数据了
                  hasMore = articleRes.data.size == pageSize
                  listLoader = true
                  refreshing = false
            } else {
                  val message = articleRes.message
                  Log.e("hgm", "swipersData网络加载信息: $message")
                  pageOffset--
                  if (pageOffset < 1) {
                        pageOffset = 1
                  }
            }
      }

      //加载更多文章
      suspend fun loadMore() {
            if (hasMore) {
                  pageOffset++
                  fetchArticleList()
            }
      }

      //刷新
      suspend fun refresh() {
            pageOffset = 1
            refreshing = true
            fetchArticleList()
      }


      //HTML 头部
      private val htmlHeader = """
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title></title>
            <style>
                img {
                    max-width: 100% !important;
                }
            </style>
        </head>
        <body>
    """.trimIndent()

      //html尾部
      private val htmlFooter = """
        </body>
        </html>
    """.trimIndent()

      private var articleEntity: Article? = null

      var content by mutableStateOf(
            """$htmlHeader
        ${articleEntity?.content ?: ""}
        $htmlFooter
    """.trimIndent()
      )

      var infoLoaded by mutableStateOf(false)
            private set


      suspend fun fetchInfo() {
            val res = articleService.info("")
            if (res.code == 0) {
                  delay(500)
                  articleEntity = res.data
                  content = """$htmlHeader
                            ${articleEntity?.content ?: ""}
                            $htmlFooter
                        """.trimIndent()
                  infoLoaded = true
            }
      }

}